From: Keir Fraser Date: Thu, 5 Jun 2008 09:47:08 +0000 (+0100) Subject: 32-on-64: Fix physaddr_bitsize computation when creating a 32b x86 X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14200^2~95 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=98b6c37cf6517c2a262ed9ffc4bb66129b296018;p=xen.git 32-on-64: Fix physaddr_bitsize computation when creating a 32b x86 compat domain. Signed-off-by: Jan Beulich Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index c3522c516c..3483efa867 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -350,8 +350,10 @@ int switch_compat(struct domain *d) } d->arch.physaddr_bitsize = - fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1 - + (PAGE_SIZE - 2); + /* 2^n entries can be contained in guest's p2m mapping space */ + fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3 + /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */ + + PAGE_SHIFT; return 0; diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index b28ca3d235..e602b273f3 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -356,8 +356,10 @@ int __init construct_dom0( #if defined(__x86_64__) if ( is_pv_32on64_domain(d) ) d->arch.physaddr_bitsize = - fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1 - + (PAGE_SIZE - 2); + /* 2^n entries can be contained in guest's p2m mapping space */ + fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3 + /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */ + + PAGE_SHIFT; #endif /*